package com.wk.exercise.leetcode;

import com.wk.SuppressConstant;

import java.util.HashSet;

/**
 * <pre>
 *      @author : wk <br/>
 *      e-mail : 122642603@qq.com <br/>
 *      time   : 2019/7/1 <br/>
 *      GitHub : https://github.com/wk1995 <br/>
 *      address: https://leetcode-cn.com/problems/distribute-candies/
 *      CSDN   : http://blog.csdn.net/qq_33882671 <br/>
 *      desc   :  分糖果

 给定一个偶数长度的数组，其中不同的数字代表着不同种类的糖果，每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。

 示例 1:

 输入: candies = [1,1,2,2,3,3]
 输出: 3
 解析: 一共有三种种类的糖果，每一种都有两个。
 最优分配方案：妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的种类数最多。
 示例 2 :

 输入: candies = [1,1,2,3]
 输出: 2
 解析: 妹妹获得糖果[2,3],弟弟获得糖果[1,1]，妹妹有两种不同的糖果，弟弟只有一种。这样使得妹妹可以获得的糖果种类数最多。
 注意:

 数组的长度为[2, 10,000]，并且确定为偶数。
 数组中数字的大小在范围[-100,000, 100,000]内。

 来源：力扣（LeetCode）
 链接：https://leetcode-cn.com/problems/distribute-candies
 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

 * </pre>
 */
@SuppressWarnings(SuppressConstant.UNUSED)
public class Q575 implements Q {
    @Override
    public void answer() {
        int[] candies={1,1,2,2,3,3,3,3};
        System.out.println(distributeCandies(candies));
    }

    private int distributeCandies(int[] candies) {
        int candyLength=candies.length;
        if(candyLength==0){
            return 0;
        }
        //能拿到糖果的个数
        int result1=candyLength/2;
        //糖果种类
        HashSet<Integer> candyKind=new HashSet<>(16);
        for (int candy : candies) {
            candyKind.add(candy);
        }
        return Math.min(result1,candyKind.size());
    }
}
